const express = require('express');
const app = express();

//配置跨域
const cors = require('cors');
app.use(cors());

//配置解析器
app.use(express.urlencoded({ extended: false }))
//配置res.cc全局中间件
app.use((req, res, next) => {
    res.cc = (err, status = 1) => {
        res.send({
            status,
            message: err instanceof Error ? err.message : err,
        })
    }
    next();
})
//导入解析token包
const expressJWT = require("express-jwt")
//导入JWT解析密钥
const config = require('./config')
//配置解析token中间件,并通过path设置不需要token身份认证的域名
app.use(expressJWT({ secret: config.jwtSecretKey }).unless({ path: [/^\/api\//] }))



/* 路由区域 start */
const userRoutes = require("./router/user");
app.use("/api", userRoutes);
const userinfoRoutes = require('./router/userinfo')
app.use('/my', userinfoRoutes)
/* 路由区域 end */









//配置检验中间件错误中间件
const joi = require('@hapi/joi')
//配置错误中间件,需要在所有路由后面配置.
app.use(function (err, req, res, next) {
    // 数据验证失败 joi.ValidationError 表示检验对象的错误对象
    if (err instanceof joi.ValidationError) return res.cc(err)
    // 捕获身份认证失败的错误
    if (err.name === 'UnauthorizedError') return res.cc('身份认证失败！')
    // 未知错误
    res.cc(err)
})
app.listen(80, () => {
    console.log('http://localhost:80');
})